package com.zang.structure;

import java.util.Enumeration;
import java.util.Vector;

/**
 * 向量 可实现自动增长的对象数组
 * =====> 同步访问的List
 * Vector类同步每个单独的操作。这意味着每当我们想对向量执行某些操作时，Vector类就会自动对该操作应用锁。
 * 这是因为当一个线程访问一个vector时，同时另一个线程试图访问它，会生成一个称为ConcurrentModificationException的异常。
 * 因此，对每个操作持续使用锁会降低向量的效率。
 * 但是，在ArrayList中，方法是不同步的。相反，它使用Collections.synchronizedList()方法对整个列表进行同步。
 *
 * 注意：由于向量（vector）不是线程安全的并且效率较低，因此建议使用ArrayList代替Vector。
 * @author gs
 * @date 2022/6/29 1:13 PM
 */
public class VectorMain {

    public static void main(String[] args) {
        testVector();
    }

    private static void testVector() {
        // initial size is 3, increment is 2
        Vector<Object> v = new Vector<>(3, 2);
        System.out.println("Initial size: " + 0);
        System.out.println("Initial capacity: " + v.capacity());
        //插入的应是对象而不是数值
        v.addElement(new Integer(1));
        v.addElement(new Integer(2));
        v.addElement(new Integer(3));
        v.addElement(new Integer(4));
        System.out.println("Capacity after four additions: " + v.capacity());

        v.addElement(new Double(5.45));
        System.out.println("Current capacity: " + v.capacity());
        v.addElement(new Double(6.08));
        v.addElement(new Integer(7));
        System.out.println("Current capacity: " + v.capacity());
        v.addElement(new Float(9.4));
        v.addElement(new Integer(1));
        System.out.println("Current capacity: " + v.capacity());
        v.addElement(new Integer(1));
        v.addElement(new Integer(1));
        System.out.println("First element: " + (Integer) v.firstElement());
        System.out.println("Last element: " + (Integer) v.lastElement());
        if (v.contains(3)) {
            System.out.println("Vector contains 3.");
        }
        // enumerate the elements in the vector.
        Enumeration<?> vEnum = v.elements();
        System.out.println("\nElements in vector:");
        while (vEnum.hasMoreElements()) {
            System.out.print(vEnum.nextElement() + " ");
        }
        System.out.println();
    }
}
